<?php
namespace Admin\Controller;

use Think\Controller;

//常用接口
class OftenController extends Controller
{
    //确认凭证，发送数据至外部接口
    static function external_confirm_voucher($msg){
        $url='www.hzdouniu.cn/api/xyc/save_lous';
        $data['borrowMobile']=$msg['mobile'];
        $data['borrowName']=$msg['borrower'];
        $data['borrowIdentity']=$msg['card_id'];
        $data['lenderMobile']=$msg['lender_mobile'];
        $data['lenderName']=$msg['lender'];
        $data['lenderIdentity']=$msg['lender_idcard'];
        $data['borrowMoney']=$msg['money'];
        $data['interest']=$msg['interest'];
        $data['returnTimeStr']=$msg['repayment_time']*1000;
        $data['borrowTimeStr']=$msg['loan_time']*1000;
        $data['purpose']='打凭证';
//        file_put_contents('./Public/log/external.log',date('Y-m-d').'--'.json_encode($data)."\n",FILE_APPEND);
        $res=MycommonController::set_curl($url,$data);
        file_put_contents('./Public/log/external.log',date('Y-m-d').'--'.$res."<br/>确认凭证：借款人-".$msg['mobile'].",借款时间-".date('Y-m-d',$msg['loan_time'])."\n",FILE_APPEND);
//        响应参数	类型	说明
        //resultCode	Int	响应结果码，1000-成功
        //nowTime	Long	当前时间时间戳
        //success	Boolean	响应码
        //data	Json	成功时返回
        //data.orderNo	String	牛牛借条订单号，用于撕毁及展期接口使用
    }

    //撕毁凭证，发送数据至外部接口
    static function external_tear_voucher($msg){
        $url='www.hzdouniu.cn/api/xyc/tear_up_voucher';
        $data['lenderMobile']=$msg['lender_mobile'];
        $data['orderNo']=$msg['numbering'];
//        file_put_contents('./Public/log/external.log',date('Y-m-d').'--'.json_encode($data)."\n",FILE_APPEND);
        $res=MycommonController::set_curl($url,$data);
        file_put_contents('./Public/log/external.log',date('Y-m-d').'--'.$res."<br/>撕毁凭证：出借人-".$msg['lender_mobile'].",订单号-".$msg['numbering']."\n",FILE_APPEND);
//       响应参数	类型	说明
    //    resultCode	Int	响应结果码，1000-成功
    //    nowTime	Long	当前时间时间戳
    //    success	Boolean	响应码
    //    data	Json	成功时返回
    }

    /**
     * 撕毁凭证添加中智城上报数据
     * @param string $orderno 凭证订单号
     */
    static function tear_add_zzc($orderno){
        $zzc_up_data_record_db=M('zzc_up_data_record','','XYC');
        $certificate_db=M('certificate','','XYC');
        if(!empty($zzc_up_data_record_db->WHERE(['orderno'=>$orderno])->getField('id'))){
            $msg=$certificate_db->WHERE(['numbering'=>$orderno])->FIND();
            $data['user_id']=$msg['borrower_id'];
            $data['orderno']=$orderno;
            $data['type']='4';
            $data['ctime']=time();
            $data['should_time']=$msg['period_time'];
            $data['should_repay_money']=$msg['money'];
            $data['real_repay_money']=$msg['money'];
            $data['is_over']='2';
            $zzc_up_data_record_db->add($data);
        }

    }

    /**
     * 确认凭证上报中智城数据
     * @param string $borrow_no 凭证订单号
     */
    static function zzc_up_data($borrow_no=''){
        $certificate_db=M('certificate','','XYC');
        $zzc_up_data_record_db=M('zzc_up_data_record','','XYC');
        $user_login_db=M('user_login','','XYC');

        $zzc_up_extend_data_record_db=M('zzc_up_extend_data_record','','XYC');
        $user_db=M('user','','XYC');
//        $borrow_no=I('orderno');//凭证订单号
        if(!empty($borrow_no)){
            $user_borrow_msg=$certificate_db->WHERE(['numbering'=>$borrow_no])->FIND();
            $user_login_msg=$user_login_db->WHERE(['user_id'=>$user_borrow_msg['borrower_id']])->FIND();
            if(strpos($user_login_msg['lng_lat'],'lat')!==false){
                $coordinate = explode(',', $user_login_msg['lng_lat']);
                $lat = explode(':', $coordinate[0])[1];
                $lng = explode(':', $coordinate[1])[1];
            }else{
                $lat = explode(',', $user_login_msg['lng_lat'])[0];
                $lng = explode(',', $user_login_msg['lng_lat'])[1];
            }
            $borrow_day=(strtotime(date('Y-m-d',$user_borrow_msg['repayment_time']))-strtotime(date('Y-m-d',$user_borrow_msg['loan_time'])))/(3600*24);
            $res=self::zzc_up_data_jiekuan($user_borrow_msg['borrower'],$user_borrow_msg['card_id'],$user_borrow_msg['mobile'],$user_borrow_msg['numbering'],$user_login_msg['ctime'],$user_borrow_msg['loan_time'],$user_borrow_msg['loan_time'],$user_borrow_msg['money'],$borrow_day,$user_borrow_msg['repayment_time'],$user_login_msg['register_ip'],$lng,$lat);

            $res=json_decode($res,true);
            if($res['status']=='success'){
                $zzc_up_data_record_db->add(['user_id'=>$user_borrow_msg['borrower_id'],'orderno'=>$user_borrow_msg['numbering'],'ctime'=>time(),'status'=>'2','content'=>$res['status'],'should_repay_money'=>$user_borrow_msg['money'],'should_time'=>$user_borrow_msg['repayment_time']]);
            }else{
                $zzc_up_data_record_db->add(['user_id'=>$user_borrow_msg['borrower_id'],'orderno'=>$user_borrow_msg['numbering'],'ctime'=>time(),'status'=>'3','content'=>$res['errorMessage'],'should_repay_money'=>$user_borrow_msg['money'],'should_time'=>$user_borrow_msg['repayment_time']]);
            }
//            var_dump($res);
        }else{
            $list=$zzc_up_data_record_db->WHERE(['status'=>'1'])->LIMIT(10)->SELECT();
            if(!empty($list)){
                foreach($list as $k=>$v){
                    switch($v['type']){
                        //订单逾期【未分期】
                        case '2':
                            $res=self::zzc_up_data_gengxin($v['orderno'],'1','overdue',$v['should_time'],$v['should_repay_money'],'',$v['ctime'],'open','',$v['overdue_day']);
                            break;
                        //还款【未分期】
                        case '4':
                            $res=self::zzc_up_data_gengxin($v['orderno'],'1','normal',$v['should_time'],$v['should_repay_money'],$v['real_repay_money'],$v['ctime'],'closed',$v['ctime']);
                            break;
                    }
                    var_dump($res);
                    $res=json_decode($res,true);
                    if($res['status']=='success'){
                        $zzc_up_data_record_db->WHERE(['status'=>'1','id'=>$v['id']])->SAVE(['status'=>'2','content'=>$res['status']]);
                    }else{
                        $zzc_up_data_record_db->WHERE(['status'=>'1','id'=>$v['id']])->SAVE(['status'=>'3','content'=>$res['errorMessage']]);
                    }
                }
            }

            $list2=$zzc_up_extend_data_record_db->WHERE(['status'=>'1'])->LIMIT(10)->SELECT();
            if(!empty($list2)){
                foreach($list2 as $k=>$v){
                    $user_msg=$user_db->JOIN("u JOIN user_login ul ON u.id=ul.user_id")->WHERE(['u.id'=>$v['user_id']])->FIELD("u.username,u.identity_num,u.mobile,u.ctime,ul.register_ip,ul.lng_lat")->FIND();
                    if(strpos($user_msg['lng_lat'],'lat')!==false){
                        $coordinate = explode(',', $user_msg['lng_lat']);
                        $lat = explode(':', $coordinate[0])[1];
                        $lng = explode(':', $coordinate[1])[1];
                    }else{
                        $lat = explode(',', $user_msg['lng_lat'])[0];
                        $lng = explode(',', $user_msg['lng_lat'])[1];
                    }
                    $res=self::zzc_up_data_zhanqi($user_msg['username'],$user_msg['identity_num'],$user_msg['mobile'],$v['orderno'],$user_msg['ctime'],$v['apply_time'],$v['get_time'],$v['money'],$v['num'],$v['repay_time'],$v['days'],$user_msg['register_id'],$lng,$lat);
                    var_dump($res);
                    $res=json_decode($res,true);
                    if($res['status']=='success'){
                        $zzc_up_extend_data_record_db->WHERE(['status'=>'1','id'=>$v['id']])->SAVE(['status'=>'2','content'=>$res['status']]);
                    }else{
                        $zzc_up_extend_data_record_db->WHERE(['status'=>'1','id'=>$v['id']])->SAVE(['status'=>'3','content'=>$res['errorMessage']]);
                    }
                }
            }

        }
    }

    /**
     * 中智城上报数据接口---贷款批核上报【借款时候使用】
     * @param string $truename 用户实名
     * @param string $id_card 用户身份号
     * @param int $mobile 用户手机号
     * @param string $borrow_no 用户借款订单号
     * @param int $user_ctime 用户创建时间
     * @param int $apply_time 用户借款时间
     * @param int $get_time 用户到账时间
     * @param float $money 借款金额
     * @param int $days 借款天数
     * @param int $repay_time 首次还款日
     * @param string $register_ip 用户注册ip
     * @param float $lng 用户注册所在经度
     * @param float $lat 用户注册所在纬度
     * @return mixed|string
     */
    static function zzc_up_data_jiekuan($truename,$id_card,$mobile,$borrow_no,$user_ctime,$apply_time,$get_time,$money,$days,$repay_time,$register_ip,$lng,$lat){
        $url='https://test3.intellicredit.cn/riskcontrol/api/v1/loan/issue';//测试
//        $url='https://riskcontrol3.intellicredit.cn/api/v1/loan/issue';//正式
        $name='705188245@qq.com';//中智城账号
        $pwd='Jyyjr@0577';//中智城账号密码
        $header=array("Authorization:Basic ".base64_encode($name.':'.$pwd) ,'Content-Type:application/json');
        $data['name']=$truename;//用户名
        $data['pid']=$id_card;//用户身份号
        $data['mobile']=$mobile;//用户手机号
        $data['loanId']=$borrow_no;//借款订单号
        $data['loanType']='1';//借贷类型，默认1，现金贷
        $data['accountOpenDate']=date('Y-m-d',$user_ctime).'T'.date('H:i:s',$user_ctime);//用户平台注册时间，例如：2016-03-08T08:20:44
        $data['applyDate']=date('Y-m-d',$apply_time).'T'.date('H:i:s',$apply_time);//申请时间，例如：2016-03-08T08:20:44
        $data['issueDate']=date('Y-m-d',$get_time).'T'.date('H:i:s',$get_time);//放款时间，例如：2016-03-08T08:20:44
        $data['loanAmount']=$money;//贷款金额，单位"元"
        $data['totalTerm']='1';//还款期数
        $data['termPeriod']=$days;//每期贷款周期，如产品为1期，贷款期限7天，则填写“7”，如产品为3期，每期贷款期限为30天，则填写“30”
        $data['firstRepaymentDate']=date('Y-m-d',$repay_time);//首次还款日，YYYY-MM-DD
        $data['device']=[
            'ip_address'=>$register_ip,//客户申请时使用的公网IP
            'gps_longitude'=>$lng,//申请时点设备所在的经度值
            'gps_latitude'=>$lat,//申请时点设备所在的纬度值
        ];
//        return json_encode($data);
        $res=MycommonController::set_curl($url,json_encode($data),$header);
        return $res;
        //执行完插入一个单独的表做记录
    }

    /**
     * 中智城上报数据接口--借贷人账户状态变动更新【调用场景：逾期、全额还款、部分还款剩余金额、分期还款剩余金额】
     * @param string $borrow_no 借款订单号
     * @param int $num 还款期数
     * @param string $now_status 当前是否逾期状态 normal：正常，overdue：逾期
     * @param int $repay_time 本期应还款日
     * @param float $repay_money 本期应还款金额
     * @param float $real_money 实际还款额
     * @param int $sure_time 本期还款状态确定时间
     * @param int $real_time 本期实际还款时间
     * @param string $repay_status 本期还款状态，是否已还清 open：贷款未还清，closed：贷款已还清
     * @param string $real_time 真实还款时间
     * @param string $overdue_day 逾期天数
     * @param string $type 1、分期订单，2主订单
     * @return mixed|string
     */
    static function zzc_up_data_gengxin($borrow_no,$num,$now_status,$repay_time,$repay_money,$real_money,$sure_time,$repay_status,$real_time='',$overdue_day='',$type=''){
        $url='https://test3.intellicredit.cn/riskcontrol/api/v1/loan/track';//测试
//        $url='https://riskcontrol3.intellicredit.cn/api/v1/loan/track';//正式
        $name='705188245@qq.com';//中智城账号
        $pwd='Jyyjr@0577';//中智城账号密码
        $header=array("Authorization:Basic ".base64_encode($name.':'.$pwd) ,'Content-Type:application/json');

        $data['loanId']=$borrow_no;//借款订单号
        $data['termNo']=$num;//还款期数，第几期，从1开始
        $data['termStatus']=$now_status;//本期还款状态标签，normal：正常，overdue：逾期
        if($now_status=='overdue'){
            $data['overdueStatus']=self::get_overdue_mark($overdue_day);
        }
        $data['targetRepaymentDate']=date('Y-m-d',$repay_time);//本期应还款日，YYYY-MM-DD
        $data['targetRepayment']=$repay_money;//本期应还款额，单位"元"
        $data['statusConfirmAt']=date('Y-m-d',$sure_time).'T'.date('H:i:s',$sure_time);//本期还款状态确认时间，即实际还款时间或者判断逾期时间
        $data['loanStatus']=$repay_status;//本次贷款状态，open：贷款未还清，closed：贷款已还清
        if($repay_status=='closed' || $type=='1'){
            $data['realRepayment']=$real_money;//实际还款额，单位"元"
            $data['realRepaymentDate']=date('Y-m-d',$real_time).'T'.date('H:i:s',$real_time);
        }
        $res=MycommonController::set_curl($url,json_encode($data),$header);
        return $res;
    }

    /**
     * 根据逾期天数判断
     * @param int $overdue_day 逾期天数
     * @return string
     */
    static function get_overdue_mark($overdue_day){
        switch($overdue_day){
            case $overdue_day>=1 && $overdue_day<=30:
                return 'M1';
            case $overdue_day>=31 && $overdue_day<=60:
                return 'M2';
            case $overdue_day>=61 && $overdue_day<=90:
                return 'M2';
            case $overdue_day>=91 && $overdue_day<=120:
                return 'M3';
            case $overdue_day>=121 && $overdue_day<=150:
                return 'M4';
            case $overdue_day>=151 && $overdue_day<=180:
                return 'M5';
            case $overdue_day>=181 && $overdue_day<=365:
                return 'MN';
            case $overdue_day>=366 && $overdue_day<=730:
                return 'Y1';
            case $overdue_day>=730;
                return 'Y2';
            default :
                return '';
        }
    }


    /**
     * 中智城上报数据接口--贷款展期上报（只适用于单期产品），目前暂无场景使用
     * @param string $truename 用户实名
     * @param string $id_card 用户身份号
     * @param int $mobile 用户手机号
     * @param string $borrow_no 用户借款订单号
     * @param int $user_ctime 用户创建时间
     * @param int $apply_time 用户借款时间
     * @param int $get_time 用户到账时间
     * @param float $money 借款金额
     * @param int $num 还款期数
     * @param int $repay_time 首次还款日,展期后的还款时间
     * @param int $days 展期后的实际贷款天数。展期前贷款天数是7天，如果再延展7天，此处填写14
     * @param string $register_ip 用户注册ip地址
     * @param float $lng 用户注册所在经度
     * @param float $lat 用户注册所在纬度
     * @return mixed|string
     */
    static function zzc_up_data_zhanqi($truename,$id_card,$mobile,$borrow_no,$user_ctime,$apply_time,$get_time,$money,$num,$repay_time,$days,$register_ip,$lng,$lat){
        $url='https://test3.intellicredit.cn/riskcontrol/api/v1/loan/extend';//测试
//        $url='https://riskcontrol3.intellicredit.cn/api/v1/loan/extend';//正式
        $name='705188245@qq.com';//中智城账号
        $pwd='Jyyjr@0577';//中智城账号密码
        $header=array("Authorization:Basic ".base64_encode($name.':'.$pwd) ,'Content-Type:application/json');
        $data['name']=$truename;//用户名
        $data['pid']=$id_card;//用户身份号
        $data['mobile']=$mobile;//用户手机号
        $data['loanId']=$borrow_no;//借款订单号
        $data['originalLoanId']=$borrow_no;//原借款订单号
        $data['loanType']='1';//借贷类型，默认1，现金贷
        $data['accountOpenDate']=date('Y-m-d',$user_ctime).'T'.date('H:i:s',$user_ctime);//用户平台注册时间，例如：2016-03-08T08:20:44
        $data['applyDate']=date('Y-m-d',$apply_time).'T'.date('H:i:s',$apply_time);//申请时间，例如：2016-03-08T08:20:44
        $data['issueDate']=date('Y-m-d',$get_time).'T'.date('H:i:s',$get_time);//放款时间，例如：2016-03-08T08:20:44
        $data['loanAmount']=$money;//贷款金额，单位"元"
        $data['totalTerm']=$num;//还款期数
        $data['firstRepaymentDate']=date('Y-m-d',$repay_time);//首次还款日 展期后的首次还款时间。格式：YYYY-MM-DD
        $data['termPeriod']=$days;//每期贷款周期，如产品为1期，贷款期限7天，则填写“7”，如产品为3期，每期贷款期限为30天，则填写“30”
        $data['device']=[
            'ip_address'=>$register_ip,//客户申请时使用的公网IP
            'gps_longitude'=>$lng,//申请时点设备所在的经度值
            'gps_latitude'=>$lat,//申请时点设备所在的纬度值
        ];
        $res=MycommonController::set_curl($url,json_encode($data),$header);
        return $res;
    }
}